package com.example.Java8InAction.stream;

import java.util.Arrays;
import java.util.function.Predicate;

/**
 * 断言函数 test
 */
public class PredicateDemo {
    public static void main(String[] args) {
        Integer[] arr = {-12345, 9999, 520, 0, -38, -7758520, 941213};
        //a) 使用lambda表达式创建Predicate对象p1,p1能判断整数是否是自然数(大于等于0)
        Predicate<Integer> p1 = (i) -> i >= 0;
        //b) 使用lambda表达式创建Predicate对象p2,p2能判断整数的绝对值是否大于100
        Predicate<Integer> p2 = (i) -> Math.abs(i) >= 100;
        //c) 使用lambda表达式创建Predicate对象p3,p3能判断整数是否是偶数
        Predicate<Integer> p3 = (i) -> i % 2 == 0;
        //i. 打印自然数的个数
        long count1 = Arrays.stream(arr).filter(p1).count();
        System.out.println("自然数的个数为：" + count1);

        //ii. 打印负整数的个数
        long count2 = Arrays.stream(arr).filter(p1.negate()).count();
        System.out.println("负整数个数为：" + count2);

        //iii. 打印绝对值大于100的偶数的个数
        long count3 = Arrays.stream(arr).filter(p2.and(p3)).count();
        System.out.println("绝对值大于100的偶数的个数：" + count3);

        //iv. 打印是负整数或偶数的数的个数
        long count4 = Arrays.stream(arr).filter(p1.negate().or((p3))).count();
        System.out.println("负整数或偶数的数的个数" + count4);
    }
}
